﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Controllers;

namespace GestorDeFlotasDesktop
{
    public partial class lstViajesRepetidos : Form
    {

        #region Propiedades

        private const int registrosPorPagina = 10;

        #endregion
        public lstViajesRepetidos()
        {
            InitializeComponent();
        }

        #region Eventos

        private void lstViajesRepetidos_Load(object sender, EventArgs e)
        {
            CargarGrilla();
            CargarColumnasRepetidas();
        }

        private void gvwViajes_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            // Ignora clicks que no son a botones 
            if (e.RowIndex < 0 || e.ColumnIndex !=
                gvwViajes.Columns["Boton"].Index) return;

            var viaje = ((Viaje)gvwViajes.CurrentRow.DataBoundItem);

            CargarRepeticiones(viaje);


        }

        private void gvwRepetidos_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            // Ignora clicks que no son a botones 
            if (e.RowIndex < 0 || e.ColumnIndex !=
                gvwRepetidos.Columns["Boton"].Index) return;

            var viaje = ((Viaje)gvwRepetidos.CurrentRow.DataBoundItem);


            var result = MessageBox.Show("Esta seguro que desea eliminar fisicamente este viaje?", "Viajes Repetidos", MessageBoxButtons.YesNoCancel);

            if (result != DialogResult.Yes) return;

            ViajeController.EliminarViaje(viaje);
            MessageBox.Show("El viaje fue eliminado con éxito");

            ActualizarGrilla();

            gvwRepetidos.DataSource = null;
            lblResolver.Visible = false;
            gvwRepetidos.Visible = false;
        }
        #endregion

        #region Grilla Repeticiones

        private void CargarRepeticiones(Viaje viaje)
        {
            gvwRepetidos.Visible = true;
            lblResolver.Visible = true;

            gvwRepetidos.DataSource = null;
            gvwRepetidos.DataSource = ViajeController.ObtenerRepeticiones(viaje);


        }

        private void CargarColumnasRepetidas()
        {
            gvwRepetidos.Visible = false;
            lblResolver.Visible = false;
            gvwRepetidos.AutoGenerateColumns = false;
            var colCliente = new DataGridViewTextBoxColumn
            {
                DataPropertyName = "Viaje_Cliente",
                Name = "Viaje_Cliente",
                HeaderText = "Cliente",
                ReadOnly = true,
                Width = 120
            };
            gvwRepetidos.Columns.Add(colCliente);


            var colFichas = new DataGridViewTextBoxColumn
            {
                DataPropertyName = "Viaje_Cant_Fichas",
                Name = "Viaje_Cant_Fichas",
                HeaderText = "Cant Fichas",
                ReadOnly = true,
                Width = 120
            };
            gvwRepetidos.Columns.Add(colFichas);

            var colimporte = new DataGridViewTextBoxColumn
            {
                DataPropertyName = "Viaje_Importe",
                Name = "Viaje_Importe",
                HeaderText = "Importe",
                ReadOnly = true,
                Width = 120
            };
            gvwRepetidos.Columns.Add(colimporte);


            var colBoton = new DataGridViewButtonColumn
            {
                Name = "Boton",
                HeaderText = "Eliminar",
                Text = "Eliminar",
                ReadOnly = true,
                Width = 100,
                UseColumnTextForButtonValue = true
            };

            gvwRepetidos.Columns.Add(colBoton);
        }

        #endregion

        #region Grilla Viajes

        private void CalcularCantidadRegistros()
        {
            var cantidadRegistros = ViajeController.ObtenerCantidadDuplicados();

            var cantidadPaginas = cantidadRegistros / registrosPorPagina;
            if (cantidadRegistros % registrosPorPagina > 0) // if remainder is more than  zero 
            {
                cantidadPaginas += 1;
            }

            lblCantidadPaginasTotales.Text = cantidadPaginas.ToString();
        }

        private void CargarGrilla()
        {
            gvwViajes.AutoGenerateColumns = false;
            lblPagina.Text = "1";

            CalcularCantidadRegistros();
            ActualizarGrilla(Convert.ToInt32(lblPagina.Text));

            var colTurno = new DataGridViewTextBoxColumn
            {
                DataPropertyName = "Viaje_Turno",
                Name = "Viaje_Turno",
                HeaderText = "Turno",
                ReadOnly = true,
                Width = 120
            };
            gvwViajes.Columns.Add(colTurno);

            var colChofer = new DataGridViewTextBoxColumn
            {
                DataPropertyName = "Viaje_Chofer",
                Name = "Viaje_Chofer",
                HeaderText = "Chofer",
                ReadOnly = true,
                Width = 120
            };
            gvwViajes.Columns.Add(colChofer);

            var colAuto = new DataGridViewTextBoxColumn
            {
                DataPropertyName = "Viaje_Auto",
                Name = "Viaje_Auto",
                HeaderText = "Auto",
                ReadOnly = true,
                Width = 120
            };
            gvwViajes.Columns.Add(colAuto);

            var colFecha = new DataGridViewTextBoxColumn
            {
                DataPropertyName = "Viaje_Fecha",
                Name = "Viaje_Fecha",
                HeaderText = "Fecha",
                ReadOnly = true,
                Width = 120
            };
            gvwViajes.Columns.Add(colFecha);

            var colRepeticiones = new DataGridViewTextBoxColumn
            {
                DataPropertyName = "Viaje_Repeticiones",
                Name = "Viaje_Repeticiones",
                HeaderText = "Repeticiones",
                ReadOnly = true,
                Width = 120
            };
            gvwViajes.Columns.Add(colRepeticiones);



            var colBoton = new DataGridViewButtonColumn
            {
                Name = "Boton",
                HeaderText = "Seleccionar",
                Text = "Seleccionar",
                ReadOnly = true,
                Width = 100,
                UseColumnTextForButtonValue = true
            };

            gvwViajes.Columns.Add(colBoton);
        }

        public void ActualizarGrilla()
        {
            ActualizarGrilla(Convert.ToInt32(lblPagina.Text));
        }

        private void ActualizarGrilla(int pagina)
        {
            lblCartelDe.Visible = true;
            lblPagina.Visible = true;
            lblCantidadPaginasTotales.Visible = true;
            btnUltimaPagina.Enabled = true;
            btnProximaPagina.Enabled = true;
            btnPaginaAnterior.Enabled = true;
            btnPrimeraPagina.Enabled = true;

            lblCartelPagina.Text = "Mostrando página";

            gvwViajes.DataSource = ViajeController.ObtenerViajesDuplicados(pagina, registrosPorPagina);

            var cantidadPaginas = Convert.ToInt32(lblCantidadPaginasTotales.Text);

            if (cantidadPaginas == 1)
            {
                btnUltimaPagina.Enabled = false;
                btnProximaPagina.Enabled = false;
                btnPaginaAnterior.Enabled = false;
                btnPrimeraPagina.Enabled = false;
            }
            else if (cantidadPaginas == 0)
            {
                btnUltimaPagina.Enabled = false;
                btnProximaPagina.Enabled = false;
                btnPaginaAnterior.Enabled = false;
                btnPrimeraPagina.Enabled = false;

                lblCartelDe.Visible = false;
                lblPagina.Visible = false;
                lblCantidadPaginasTotales.Visible = false;

                lblCartelPagina.Text = "No hay registros disponibles";
            }
            else
            {
                if (lblPagina.Text == lblCantidadPaginasTotales.Text)
                {
                    btnUltimaPagina.Enabled = false;
                    btnProximaPagina.Enabled = false;
                }
                else if (lblPagina.Text == "1")
                {
                    btnPrimeraPagina.Enabled = false;
                    btnPaginaAnterior.Enabled = false;
                }
            }
        }

        #endregion

        #region Paginador
        private void btnProximaPagina_Click(object sender, EventArgs e)
        {
            var pagina = Convert.ToInt32(lblPagina.Text);
            pagina++;
            lblPagina.Text = pagina.ToString();
            ActualizarGrilla(pagina);
        }

        private void btnPaginaAnterior_Click(object sender, EventArgs e)
        {
            var pagina = Convert.ToInt32(lblPagina.Text);
            pagina--;
            lblPagina.Text = pagina.ToString();
            ActualizarGrilla(pagina);
        }

        private void btnUltimaPagina_Click(object sender, EventArgs e)
        {
            lblPagina.Text = lblCantidadPaginasTotales.Text;
            ActualizarGrilla(Convert.ToInt32(lblPagina.Text));
        }

        private void btnPrimeraPagina_Click(object sender, EventArgs e)
        {
            lblPagina.Text = "1";
            ActualizarGrilla(Convert.ToInt32(lblPagina.Text));
        }
        #endregion



    }
}
